#include <iostream>

using namespace std;

class A
{
    int a;
    static int b;
    public:
    friend void g(A &p)
    {
            p.a=3; b= 5
    }

    void f()
    {
        cout <<a << " " << b <<endl;
    }
};




int main()
{

    A o;
    g(o);
    o.f()
} 
给出一颗有n个节点的树，节点被编号为1-n，树上每个节点都写着一个值，互不相同且属于1-n。树上的一条路径是由一个或多个节点组成的序列，且该序列中任意两个相邻的节点在树上都被一条边所连接。若两个路径包含的节点集合相同，认为是同一条路径。显然一条路径可以由序列中的第一个和最后一个节点唯一确定，因此一棵树有n个节点则恰好有n(n+1)/2条路径。
令k为1到n的整数，定义f(k)为满足“属于该路径的所有节点上写着的值最大恰好为k”的路径数量。求f(1),f(2)...f(n)
输入的第一行有一个正整数n，表示节点数
第二行有n个互不相同的正整数，第i个表示节点i的值
第三行和第四行均有n-1个数，构成一个大小为2*（n-1）的矩阵。矩阵第i列上的两个数u，v代表树上有一条连接着编号为u的点和编号为v的点的边。
数字之间用空格分开。
例如，输入为
5
4 3 2 1 5
1 1 5 1
2 3 4 4
输出为
1 1 1 7 5